哈囉大家好~
昨天簡單地學習了如何透過Model和資料庫進行互動的語法(對資料庫中的數據進行增刪查改),
今天想要實際試試看連接Laravel專案還有本地的MySQL資料庫。
但在連接資料庫之前,要來認識Laravel專案中的另一個工具-migration。
Migration負責的是資料庫的管理,在Laravel專案中可以透過migration來定義以及修改資料庫中的表格與結構。有了migration,我們可以不用到PHP MyAdmin中創建或編輯資料庫的欄位、架構⋯⋯等。
也就是說,透過寫程式碼的方式,可以完成:資料表的建立與刪除、調整資料表的結構(對欄位做增刪修的處理)、以及最特別的,「資料庫的版本控制」!
不用擔心搞砸,隨時可以回到上一步或是前幾步的操作~
首先要練習創建migration之前,必須要先讓Laravel專案與資料庫連接。
Laravel框架有支援很多類型的資料庫,我用的是本地的MySQL資料庫進行測試。
在Laravel專案中可以找到一個env.檔案,這個檔案是Laravel用來管理專案的環境變數,
必須這這個檔案進行資料庫的設定。
DB_CONNECTION=mysql
DB_HOST=127.0.0.1 #server主機位置
DB_PORT=3306 #port
DB_DATABASE=student #資料庫名稱
DB_USERNAME=root
DB_PASSWORD=我的資料庫密碼
檔案中的DB_CONNECTION對應的是使用的資料庫,其他設定就依照想要連線的資料庫做設置。
其中DB_DATABASE是資料庫名稱,必須先建立好要連接的資料庫,不然Laravel會找不到連線位置。
接著利用artisan命令列來清除快取,確保Laravel加載最新的環境變數:
php artisan config:clear
接下來就可以來建立migration,我想要在student這個資料庫裡面建立info這個資料表,
資料表有學生id(auto increment),姓名,年紀,電話,興趣以及資料創建時間這6個欄位。
一樣先利用artisan命列來快速建立新的migration:
php artisan make:migration create_info_table
幾秒後就可以在database/migrations的目錄底下看到剛剛創建的migration!
下方則是migration檔裡面設置創建資料表與欄位的程式碼內容:
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void #當migration被執行時應如何建立資料表
{
Schema::create('info', function (Blueprint $table) { #創建table info
$table->id(); #auto increment id
$table->string('name');
$table->integer('age');
$table->string('phone', length: 20);
$table->string('hobby', length: 100);
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void #定義如何還原這個migration
{
Schema::dropIfExists('info');
}
};
up() function中創建了剛剛提到的六個欄位,搭配我希望對應欄位的儲存資料類型。
例如:姓名是string,電話也是string,但是有限制長度為20。官方文檔中還有提供很多資料類型讓開發者選擇,有興趣的邦友也可以到官網migrations這個類別看看喔!
down() function中則是定義如何刪除資料表或欄位,例如我想新增一個欄位「家長」,那我就創建一個新的migration:
#這裡指定要更動的資料表為“info"
php artisan make:migration add_parent_to_info_table --table=info
然後在對應的migration檔案的up() function裡面撰寫新增欄位的程式碼:
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::table('info', function (Blueprint $table) {
$table->string('parent')->nullable();
#新增parent欄位(資料型別string,允許空值)
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('info', function (Blueprint $table) {
$table->dropColumn('parent'); #還原時,移除parent欄位
});
}
};
確認程式碼無誤之後,再次利用artisan命令列編輯資料表架構:
php artisan migrate
如果新增完欄位之後,發現不需要想要刪除該欄位,可以用artisan命令列回到上一步(也就是執行剛剛down()function裡面的內容!)
php artisan migrate:rollback
今天對於migration的簡單介紹就到這邊結束啦~
昨天的Model用來處理資料表中的數據,今天的Migration則是用來處理資料表與資料庫的架構!
兩個部分拼在一起看比較完整也比較好理解呢
那就明天再見囉 881~